package com.company.nuwa.common.utils;


import com.github.pagehelper.PageInfo;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>分页工具类</p >
 *
 * @author Allen
 * @version 1.0
 * @date 2021/05/25 18:31
 */
public class PageUtils {

    /**
     * 改变分页信息结果集
     * @param pageInfo
     * @param list
     * @param <T>
     * @return
     */
    public static <T> PageInfo<T> transformPageInfo(PageInfo pageInfo, List<T> list){
        PageInfo<T> result = new PageInfo<>();
        //当前页
        result.setPageNum(pageInfo.getPageNum());
        //每页的数量
        result.setPageSize(pageInfo.getPageSize());
        //当前页的数量
        result.setSize(pageInfo.getSize());
        //当前页面第一个元素在数据库中的行号
        result.setStartRow(pageInfo.getStartRow());
        //当前页面最后一个元素在数据库中的行号
        result.setEndRow(pageInfo.getEndRow());
        //总页数
        result.setPages(pageInfo.getPages());
        //前一页
        result.setPrePage(pageInfo.getPrePage());
        //下一页
        result.setNextPage(pageInfo.getNextPage());
        //是否为第一页
        result.setIsFirstPage(pageInfo.isIsFirstPage());
        //是否为最后一页
        result.setIsLastPage(pageInfo.isIsLastPage());
        //是否有前一页
        result.setHasPreviousPage(pageInfo.isHasPreviousPage());
        //是否有下一页
        result.setHasNextPage(pageInfo.isHasNextPage());
        //导航页码数
        result.setNavigatePages(pageInfo.getNavigatePages());
        //所有导航页号
        result.setNavigatepageNums(pageInfo.getNavigatepageNums());
        //导航条上的第一页
        result.setNavigateFirstPage(pageInfo.getNavigateFirstPage());
        //导航条上的最后一页
        result.setNavigateLastPage(pageInfo.getNavigateLastPage());
        //总记录数
        result.setTotal(pageInfo.getTotal());
        //结果集
        result.setList(list);
        return result;
    }

    /**
     * 切割列表
     * @param list
     * @param groupSize
     * @return
     */
    public static <R> List<List<R>> splitList(List<R> list, int groupSize){
        int length = list.size();
        // 计算可以分成多少组
        int num = ( length + groupSize - 1 ) / groupSize;
        List<List<R>> newList = new ArrayList<>(num);
        for (int i = 0; i < num; i++) {
            // 开始位置
            int fromIndex = i * groupSize;
            // 结束位置
            int toIndex = (i+1) * groupSize < length ? ( i+1 ) * groupSize : length ;
            newList.add(list.subList(fromIndex,toIndex)) ;
        }
        return  newList ;
    }

}
